Handle the case when ts_node_type returns NULL (bug#78938)
authorYuan Fu <casouri@gmail.com>
Fri, 4 Jul 2025 06:36:44 +0000 (23:36 -0700)
committerYuan Fu <casouri@gmail.com>
Fri, 4 Jul 2025 06:40:59 +0000 (23:40 -0700)
* src/treesit.c (Ftreesit_node_type): Handle NULL.

src/treesit.c

index 45d1bc58b0633a60be4497fd1a32ac23b02de01c..7393404f7ea11fb1a6866996219c5444261c4675 100644 (file)
@@ -426,6 +426,7 @@ static Lisp_Object Vtreesit_str_space;
 static Lisp_Object Vtreesit_str_equal;
 static Lisp_Object Vtreesit_str_match;
 static Lisp_Object Vtreesit_str_pred;
+static Lisp_Object Vtreesit_str_empty;
 
 /* This is the limit on recursion levels for some tree-sitter
    functions.  Remember to update docstrings when changing this value.
@@ -2042,8 +2043,9 @@ If NODE is nil, return nil.  */)
   treesit_initialize ();
 
   TSNode treesit_node = XTS_NODE (node)->node;
+  /* ts_node_type could return NULL, see source code.  */
   const char *type = ts_node_type (treesit_node);
-  return build_string (type);
+  return type == NULL ? Vtreesit_str_empty : build_string (type);
 }
 
 DEFUN ("treesit-node-start",
@@ -4334,6 +4336,8 @@ the symbol of that THING.  For example, (or sexp sentence).  */);
   Vtreesit_str_match = build_pure_c_string ("match");
   staticpro (&Vtreesit_str_pred);
   Vtreesit_str_pred = build_pure_c_string ("pred");
+  staticpro (&Vtreesit_str_empty);
+  Vtreesit_str_empty = build_pure_c_string ("");
 
   defsubr (&Streesit_language_available_p);
   defsubr (&Streesit_library_abi_version);